package com.fan.analysis.module.preprocessing.message.dao;

import com.fan.analysis.module.preprocessing.message.domain.vo.MessageInCompleteVo;
import com.fan.analysis.module.preprocessing.message.domain.vo.SpanMessageVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.List;

/**
 * 操作数据库的dao
 *
 * @author fan
 * @date 2021/09/20 12:56
 **/
@Component
@Mapper
public interface MessageDao {


    /**
     * 获取指定数量的短信记录
     *
     * @param number 指定数量
     * @return 指定数量的短信记录
     */
    List<MessageInCompleteVo> listByNum(@Param("number") Integer number);


    /**
     * 获取指定数量的垃圾短信记录
     *
     * @param number 指定数量
     * @return 指定数量的垃圾短信记录
     */
    List<SpanMessageVo> listSpanMessageByNum(@Param("number") Integer number);


    /**
     * 查询发送方为接收方的记录
     *
     * @param recNum 接收方
     * @param time   时间
     * @return 发送方为接收方的记录
     */
    MessageInCompleteVo getByRecNum(@Param("recNum") String recNum, @Param("time") Date time);

    // 查询发送方

    /**
     * 查询接收方为发送方的记录
     *
     * @param sendNum 发送方
     * @param time    时间
     * @return 接收方为发送方的记录
     */
    MessageInCompleteVo getBySendNum(@Param("sendNum") String sendNum, @Param("time") Date time);


    /**
     * 获取最新短信记录的时间
     *
     * @param sendNum 发送方
     * @param recNum  接收方
     * @return 最新短信记录的时间
     */
    MessageInCompleteVo getMaxTime(@Param("sendNum") String sendNum, @Param("recNum") String recNum);


    /**
     * 获取短信记录的位置的众数
     *
     * @param sendNum 发送方
     * @param recNum  接收方
     * @return 短信记录的位置的众数
     */
    MessageInCompleteVo getModeLocation(@Param("sendNum") String sendNum, @Param("recNum") String recNum);


    /**
     * 更新是否补齐的标志
     *
     * @param flag 标识1
     * @param id   短信记录唯一id
     * @return 更新是否成功
     */
    Integer updateFlag(@Param("flag") Integer flag, @Param("id") Long id);


    /**
     * 通过唯一id更新发送方
     *
     * @param sendNum 发送方
     * @param id      唯一id
     * @return 更新是否成功
     */
    Integer updateSendNum(@Param("sendNum") String sendNum, @Param("id") Long id);


    /**
     * 通过唯一id更新接收方
     *
     * @param recNum 接收方
     * @param id     唯一id
     * @return 更新是否成功
     */
    Integer updateRecNum(@Param("recNum") String recNum, @Param("id") Long id);


    /**
     * 更新时间
     *
     * @param time 事件
     * @param id   唯一id
     * @return 更新是否成功
     */
    Integer updateTime(@Param("time") Date time, @Param("id") Long id);


    /**
     * 更新短信内容
     *
     * @param content 短信内容
     * @param id      唯一id
     * @return 更新是否成功
     */
    Integer updateContent(@Param("content") String content, @Param("id") Long id);


    /**
     * 更新位置
     *
     * @param userLocation 位置
     * @param id           id
     * @return 更新是否成功
     */
    Integer updateUserLocation(@Param("userLocation") String userLocation, @Param("id") Long id);


}
